<?php
/**
 * wechat php test
 */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
$wechatObj->responseMsg();


class wechatCallbackapiTest
{
  public function valid()
  {
    $echoStr = $_GET["echostr"];
    //valid signature , option
    if($this->checkSignature()){
      echo $echoStr;
      exit;
    }
  }

  public function responseMsg()
  {
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

    if(!empty($postStr)){
        $postObj =simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $RX_TYPE =trim($postObj->MsgType);

        switch ($RX_TYPE) {
            case 'text':
                //文本消息
                $resultStr =$this->handleText($postObj);
                break;
            case 'event':
                //事件消息
                $resultStr =$this->handleEvent($postObj);
                break;          
            default:
                $resultStr ="没有 msgType 类型".$RX_TYPE.$postObj;
                break;
        }
         echo $resultStr;
    }else{
        echo "";
        exit;
    }
  }

 //文本消息
 public function handleText($postObj)
  {
    $fromUsername = $postObj->FromUserName;
    $toUsername = $postObj->ToUserName;
    $keyword = trim($postObj->Content);
    $time = time();
    $textTpl ="<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[%s]]></MsgType>
          <Content><![CDATA[%s]]></Content>
          <FuncFlag>0</FuncFlag>
          </xml>";
    if(!empty($keyword))
    {
       $msgType ="text";
       $contentStr="mhz 微信回复文本消息";
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
      echo $resultStr;
    }else{
        echo "Input something...";
    }
  }


  private function checkSignature()
  {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];  
        
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    
    if( $tmpStr == $signature ){
      return true;
    }else{
      return false;
    }
  }
}

?>